package main

import (
	"encoding/json"
	"fmt"
)

// 结构体和json

// 1. 序列化： 把Go语言中的结构体变量 --> json格式的字符串
// 2. 反序列化：json 格式的字符串 --> Go语言中能够识别的结构体变量

type person struct {
	Name string `json:"name"` // 当用json来解析时就为name
	Age  int    `json:"age"`
}

func main() {
	p1 := person{
		Name: "舟舟",
		Age:  91,
	}
	// 序列化
	b, err := json.Marshal(p1)
	if err != nil {
		fmt.Printf("marshal failed, err:%v", err)
		return
	}
	fmt.Printf("%#v\n", string(b))
	fmt.Printf("%v\n", string(b)) // {"name":"舟舟","age":91}
	// 反序列化
	str := `{"name":"sky","age":18}`
	var p2 person
	json.Unmarshal([]byte(str), &p2) // 传指针是为了能在json.Unmarshal内部修改p2的值
	fmt.Printf("%#v\n", p2)          // main.person{Name:"sky", Age:18}
}
